package com.jxtc.enterprise.common.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jxtc.enterprise.common.entity.FoodMenu;
import com.jxtc.enterprise.employee.dto.OrderDetailWithFoodInfoDTO;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Set;

public interface FoodMenuMapper extends BaseMapper<FoodMenu> {

    List<HashMap<String, Object>> queryMatchedFoodsByKeywordAndCompanyId(
            @Param("companyId") String companyId,
            @Param("foodName") String foodName,
            @Param("mealType") String mealType);

    List<HashMap<String, Object>> queryFoodsByMatchedStoreIds(
            @Param("companyId") String companyId,
            @Param("storeIds") Set<String> storeIds,
            @Param("mealType") String mealType);

    /**
     * 查询查单表中，添加到菜单上的，某一个菜品项的配置，主要是 限购份数，价格等
     * 需要使用 菜单id，菜品id，以及 时间段；如果不加时间段，会查询出多条记录，比如某一个菜品，被配置到了某个菜单的 午餐 和 晚餐时段
     * 一张菜单 包含多个用餐时段的菜品了列表，每个时段的菜品列表 按照店铺分类，每个店铺内部 按照 菜品类别分类
     * @param menuId
     * @param foodId
     * @param mealType
     * @return
     */
    List<HashMap<String, Object>> queryFoodDetails(@Param("menuId") String menuId, @Param("foodId") String foodId, @Param("mealType") String mealType);


    int queryCompanyMenusByPageCount(@Param("companyName") String companyName, @Param("menuStatus") Integer menuStatus);

    List<HashMap<String, Object>> queryCompanyMenusByPage(@Param("tenantId") String tenantId, @Param("companyName") String companyName, @Param("menuStatus") Integer menuStatus,
                                                          @Param("offset") Integer offset, @Param("count") Integer count);

    /**
     * 查询某个有规格的菜品，不同规格选项的菜品的所有订单，所有选购此菜品，某种规格组合的订单，按照 取餐编号 降序 排序
     *
     * @param companyId
     * @param storeId
     * @param foodPrintName
     * @return
     */
    List<HashMap<String, Object>> queryFoodOrderDetailsByFoodPrintName(@Param("companyId") String companyId, @Param("storeId") String storeId,
                                                                       @Param("foodPrintName") String foodPrintName, @Param("mealType") String mealType);

    /**
     * 当进入订单页面时，展示所有的菜品订单列表，按照 取餐编号 降序 排序
     *
     * @param companyId
     * @param storeId
     * @return
     */
    List<HashMap<String, Object>> queryAllFoodOrderDetailsByCompanyIdAndStoreId(@Param("companyId") String companyId, @Param("storeId") String storeId);


    /**
     * 通过 OrderDetailWithFoodInfoDTO 列表中的 company_id, food_id, store_id, meal_type 批量查询 FoodMenu 信息
     *
     * @param list 包含 company_id, food_id, store_id, meal_type 数据的列表
     * @return FoodMenu 信息列表
     */
    List<FoodMenu> batchQueryFoodMenuByOrderDetail(@Param("list") List<OrderDetailWithFoodInfoDTO> list);
}
